#include <iostream>

template <typename... Elements>
struct Tuple {};

template <typename T, typename... Rest>
struct Tuple<T, Rest...> : public Tuple<Rest...> 
{
    Tuple() : 
        Tuple<Rest...>() {}

    Tuple(T t, Rest... rest) : 
        Tuple<Rest...>(rest...), 
        tail(t) {}
    
    T tail;
};

int main()
{
    Tuple<int, double, char const*> tuple1(1, 1.5, "test");

    return 0;
}
